﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dominio;
using Persistencia;


namespace Persistencia
{
    public class DeportePersistencia
    {
        public void InsertarDeporte(Deporte deporte)
        {
            using (OlimpycsLondonEntities entities = new OlimpycsLondonEntities())
            {
                DEPORTE deporteDB = GetDeporteEntity(deporte);
 
                entities.DEPORTE.AddObject(deporteDB);
                entities.SaveChanges();
            }
        }

        public void ModificarDeporte(Deporte deporte)
        {
            using (OlimpycsLondonEntities entities = new OlimpycsLondonEntities())
            {
                DEPORTE deporteDB =  entities.DEPORTE.FirstOrDefault(d => d.ID == deporte.Id);
                deporteDB.NOMBRE = deporte.Nombre;

                entities.SaveChanges();
            }
        }

        public void EliminarDeporte(Deporte deporte)
        {
            using (OlimpycsLondonEntities context = new OlimpycsLondonEntities())
            {
                try
                {
                    DEPORTE deporteBD = context.DEPORTE.FirstOrDefault(d => d.ID == deporte.Id);
                    context.DeleteObject(deporteBD);
                    context.SaveChanges();
                   
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            
        }

        public List<Deporte> GetAllDeportes()
        {
            List<Deporte> deportes = new List<Deporte>();

            using (OlimpycsLondonEntities entities = new OlimpycsLondonEntities())
            {
                List<DEPORTE> deportesDB = entities.DEPORTE.ToList();
                Deporte deporte = null;
                foreach (DEPORTE deporteDB in deportesDB)
                {
                    deporte = GetDeporteDomain(deporteDB);
                    deportes.Add(deporte);
                }
            }

            return deportes;
        }

        public bool ExisteEventoDeporte(Deporte deporte)
        {
            
            using (OlimpycsLondonEntities entities = new OlimpycsLondonEntities())
            {
                EVENTO eventoDB = entities.EVENTO.FirstOrDefault((e => e.DEPORTE == deporte.Id));
                return eventoDB != null;
            }
          
        }

        public Deporte GetDeporte(string nombre)
        {
            Deporte deporte = null;

            using (OlimpycsLondonEntities entities = new OlimpycsLondonEntities())
            {
                DEPORTE deporteDB = entities.DEPORTE.FirstOrDefault((d => d.NOMBRE == nombre));

                if(deporteDB != null)
                    deporte = GetDeporteDomain(deporteDB);
            }

            return deporte;
        }

        internal static DEPORTE GetDeporteEntity(Deporte deporte)
        {
            DEPORTE deporteEntity = new DEPORTE();
            deporteEntity.ID = deporte.Id;
            deporteEntity.NOMBRE = deporte.Nombre;

            return deporteEntity;
        }

        internal static Deporte GetDeporteDomain(DEPORTE deporteEntity)
        {
            Deporte deporte = new Deporte();
            deporte.Id = deporteEntity.ID;
            deporte.Nombre = deporteEntity.NOMBRE;

            return deporte;
        }
    }
}
